package str

import (
	"sort"
	"strings"
)

//给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
//注意：若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词。
//s 和 t 仅包含小写字母

// official sort
func IsAnagram1(s string, t string) bool {

	s1, s2 := []byte(s), []byte(t)
	sort.Slice(s1, func(i, j int) bool { return s1[i] < s1[j] })
	sort.Slice(s2, func(i, j int) bool { return s2[i] < s2[j] })

	return string(s1) == string(s2)
}

// official hashtable
func isAnagram2(s string, t string) bool {
	var c1, c2 [26]int
	for _, ch := range s {
		c1[ch-'a']++
	}
	for _, ch := range t {
		c2[ch-'a']++
	}

	return c1 == c2
}

// hashTable
func IsAnagramByMySelf(s string, t string) bool {
	str1 := strings.Split(s, "")
	str2 := strings.Split(t, "")
	len1 := len(str1)
	len2 := len(str2)

	if len1 != len2 {
		return false
	}

	hashTable1 := map[string]int{}
	hashTable2 := map[string]int{}

	for i := 0; i < len1; i++ {

		if _, ok := hashTable1[str1[i]]; ok {
			hashTable1[str1[i]]++
		} else {
			hashTable1[str1[i]] = 1
		}

		if _, ok := hashTable2[str2[i]]; ok {
			hashTable2[str2[i]]++
		} else {
			hashTable2[str2[i]] = 1
		}

	}

	if len(hashTable1) != len(hashTable2) {
		return false
	}

	for k, v := range hashTable1 {
		if v != hashTable2[k] {
			return false
		}
	}

	return true

}
